package com.base.service;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

import org.apache.ibatis.annotations.Param;

import com.base.po.sqlparam.UsersExamplePage;
import com.base.po.voip.Users;
import com.base.po.voip.UsersExample;
import com.base.utils.Page;

/**
 * 后台登陆用户的服务接口
 * 
 * 1.Admin系统用户
 * 
 * 2.OEM系统用户
 * 
 * 3.商家用户
 * 
 * 4.财务系统用户
 * 
 * @author Administrator
 *
 */
public interface UsersService {

	// 删除用户
	int deleteByPrimaryKey(String id);

	// 创建用户
	int insert(String id, String username, // 昵称

               String password, // 密码

               String email, // 邮箱

               Date logintime, // 最后登录时间

               String loginip, // 登陆ip

               Integer role, // 权限0管理员1代理商2商家3开发者4用户

               Boolean datastatus, // 数据状态

               String mobile, // 手机号

               BigDecimal blance, // 当前余额

               String freeroute, // 费率

               String parentid, // 代理商id

               String agentlogo, // 代理商logo

               String prefix, // 代理商前缀

               String theme, // 后台皮肤

               Boolean addcard, // 是否允许开卡

               Boolean nextagent, // 是否允许开设下级代理

               Byte airrecharge, // 是否允许空中充值

               String androidversion, // 安卓版本号

               String androidpath, // 安卓下载地址

               String iosversion, // 苹果版本号

               String iospath, // 苹果更新地址

               Integer regimoney, // 注册赠送金额

               Integer regishopmoney, // 注册赠送金额

               Integer regitime, // 注册赠送有效期

               Date endtime, // 账户过期时间

               String pic, // 用户头像 //代理商头像

               BigDecimal dkbl, // 商城抵扣比例

               Boolean isshop, // 商户是否开通商城

               Integer type, // 账户充值类型

               String shopid, // 用户广告商id

               String adid, // 代理商阿里妈妈广告id

               BigDecimal profitratio, // 代理商分润比例

               String appkey, // 阿里妈妈appkey

               String appsecret, // 阿里妈妈appsecret

               BigDecimal linebalance, // 线路余额

               String pid, // 阿里妈妈推广位id

               String dappkey, // 大淘客appkey

               String sqappkey, // 转链key

               Integer overdraft, // 透支金额

               String appstore, // appstore是否显示

               String appid, // 阿里支付appid

               String keypath, // 私钥地址

               String agentprefix, // 代理商前缀

               String oneagent, // 顶级代理

               Boolean sxxh, // 双透

               Boolean isauth, // 认证状态

               Boolean isalipay, // 线上支付

               Boolean isprofit, // 淘宝返利

               Boolean isaliprofit, // 线上支付返利

               BigDecimal aliprofitratio, // 代理商分润比例

               BigDecimal aliprofitmoney, // 代理商分润比例

               BigDecimal profitmoney, // 代理商分润金额

               Integer shopblance, // 空冲购物余额

               Integer igtype, // 积分结算类型

               Integer calltype,// 线路商1久话2魅逸

			   Byte isgrounding
    );

	// 根据用户ID更新用户
	int updateByPrimaryKeySelective(Users record);

	// 根据用用户主键查询用户
	Users selectByPrimaryKey(String id);
	Users selectsomeByPrimaryKey(String id);
	// 根据用户名称查询用户信息
	Users selectByUsername(String username);

	int countByExample(UsersExample example);

	int deleteByExample(UsersExample example);

	int insert(Users record);

	int insertSelective(Users record);
	
	List<Users> selectByUsers(Users record);

	List<Users> selectByExample(UsersExample example);
	
	List<Users> selectByUserName(@Param("username") String username);
	
	List<String> selectByParentId(@Param("parentId") String parentId);
	
	List<Users> selectByPid(@Param("parentId") String parentId);
	
	List<String> selectParentIdByShopiId(@Param("shopid") String shopid);
	
	List<String> selectUserNameByParentId(@Param("parentId") String parentId);
	
	List<String> selectByShopId(@Param("shopId") String shopId);
	
	List<String> selectUserNameByShopId(@Param("shopId") String shopId);

	List<Users> selectByExamplePage(UsersExamplePage examplePage);
	
	List<Users> selectByAll(@Param("page") Page page, @Param("username") String username, @Param("pId") String pId,
                            @Param("sId") String sId, @Param("datastatus") Boolean datastatus);
	
	List<Users> selectByParentID(@Param("page") Page page, @Param("parentid") String parentid,
                                 @Param("username") String username, @Param("pId") String pId, @Param("sId") String sId,
                                 @Param("datastatus") Boolean datastatus);
	
	List<Users> selectByShopID(@Param("page") Page page, @Param("shopid") String shopid,
                               @Param("id") String id, @Param("pId") String pId, @Param("sId") String sId,
                               @Param("datastatus") Boolean datastatus);
	
	List<Users> selectByShopIDNotAll(@Param("page") Page page, @Param("shopid") String shopid,
                                     @Param("username") String username, @Param("pId") String pId, @Param("sId") String sId,
                                     @Param("datastatus") Boolean datastatus);
	
	List<Users> selectOEMByAll(@Param("page") Page page, @Param("username") String username,
                               @Param("datastatus") Boolean datastatus);
	
	List<Users> selectOEMByParentID(@Param("page") Page page,
                                    @Param("parentid") String parentid, @Param("username") String username,
                                    @Param("datastatus") Boolean datastatus);
	
	List<String> selectAllShop(String id);

	int updateByExampleSelective(@Param("record") Users record, @Param("example") UsersExample example);

	int updateByExample(@Param("record") Users record, @Param("example") UsersExample example);

	int updateByPrimaryKey(Users record);
	
	int countByAll(@Param("username") String username, @Param("pId") String pId,
                   @Param("sId") String sId, @Param("datastatus") Boolean datastatus);
	
	int countByParentID(@Param("parentid") String parentid, @Param("username") String username,
                        @Param("pId") String pId, @Param("sId") String sId,
                        @Param("datastatus") Boolean datastatus);
	
	int countByShopID(@Param("shopid") String shopid,
                      @Param("id") String id, @Param("pId") String pId, @Param("sId") String sId,
                      @Param("datastatus") Boolean datastatus);
	
	int countByShopIDNotAll(@Param("shopid") String shopid,
                            @Param("username") String username, @Param("pId") String pId, @Param("sId") String sId,
                            @Param("datastatus") Boolean datastatus);

    int countOEMByAll(@Param("username") String username, @Param("datastatus") Boolean datastatus);
	
	int countOEMByParentID(@Param("parentid") String parentid, @Param("username") String username,
                           @Param("datastatus") Boolean datastatus);

    Users selectShopByUsername(@Param("selfShopName") String selfShopName);

    List<Users> selectUsersByRole(@Param("role") int role);

    int hasUsers(String parentId);

    String selectAllChildByShopId(String adminUserId);

	/**
	 * 查询所有下级
	 */
	List<String> findChildList(String shopId);
}
